﻿// <copyright file="DebugMode.cs" company="TenneySoftware">
// Copyright (c) 2009 All Right Reserved
// </copyright>
// <author>Robert Tenney</author>
// <email>rob10e@yahoo.com</email>
// <date>10/6/2009</date>
// <summary>The debug modes specific to the module.</summary>

// License:

// Product: Engine.csproj
// Author: Robert N. Tenney
// Copyright: 10/6/2009

// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License
// as published by the Free Software Foundation version 2
// of the License.

// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU General Public License for more details.

// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.

// This license covers all source code, binaries, and other materials related to this project
// unless specifically stated otherwise.

using System;
using System.Collections.Generic;

namespace TenneySoftware.Engine.Debug {
    /// <summary>
    /// The debug modes specific to the module.
    /// </summary>
    public class DebugMode {
        /// <summary>
        /// Is this mode set.
        /// </summary>
        private bool isSet;

        /// <summary>
        /// The name of the mode.
        /// </summary>
        private string name;

        /// <summary>
        /// Code for the mode.
        /// </summary>
        private int debugGroup;

        /// <summary>
        /// Help for this mode.
        /// </summary>
        private string help;

        /// <summary>
        /// Initializes a new instance of the DebugMode class.
        /// </summary>
        public DebugMode() : this(string.Empty, 0, false, string.Empty) {
        }
       
        /// <summary>
        /// Initializes a new instance of the DebugMode class.
        /// </summary>
        /// <param name="name">The name of the mode.</param>
        /// <param name="debugGroup">The group of the mode.</param>
        /// <param name="help">The help for this mode.</param>
        public DebugMode(string name, int debugGroup, string help) : this(name, debugGroup, false, help) {
        }
        
        /// <summary>
        /// Initializes a new instance of the DebugMode class.
        /// </summary>
        /// <param name="name">The name of the mode.</param>
        /// <param name="debugGroup">The group of the mode.</param>
        /// <param name="isSet">Is this mode set.</param>
        /// <param name="help">The help for this mode.</param>
        public DebugMode(string name, int debugGroup, bool isSet, string help) {
            this.name = name;
            this.debugGroup = debugGroup;
            this.isSet = isSet;
            this.help = help;
        }

        /// <summary>
        /// Gets or sets the help message for this mode.
        /// </summary>
        /// <value>
        /// The help message for this mode.
        /// </value>
        public string Help {
            get {
                return this.help;
            }

            set {
                this.help = value;
            }
        }

        /// <summary>
        /// Gets or sets the name of the mode.
        /// </summary>
        /// <value>
        /// The name of the mode.</value>
        public string Name {
            get {
                return this.name;
            }

            set {
                this.name = value;
            }
        }

        /// <summary>
        /// Gets or sets the debug mode's group.
        /// </summary>
        /// <value>
        /// The debug mode's group.
        /// </value>
        public int DebugGroup {
            get {
                return this.debugGroup;
            }

            set {
                this.debugGroup = value;
            }
        }

        /// <summary>
        /// Gets or sets a value indicating whether this mode is set.
        /// </summary>
        /// <value>
        /// A value indicating whether this mode is set.
        /// </value>
        public bool Value {
            get {
                return this.isSet;
            }

            set {
                this.isSet = value;
            }
        }
    }
}
